{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\users\\thushan\\documents\\python_virtualenvs\\tensorflow_venv\\lib\\site-packages\\h5py\\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    }
   ],
   "source": [
    "import tensorflow as tf\n",
    "from matplotlib import pylab\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "import numpy as np\n",
    "\n",
    "# Required for Data downaload and preparation\n",
    "import struct\n",
    "import gzip\n",
    "import os\n",
    "from six.moves.urllib.request import urlretrieve"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Defining Hyperparameters\n",
    "\n",
    "Here we define the set of hyperparameters we're going to you in our example. These hyperparameters include `batch_size`, train dataset size (`n_train`), different layers in our CNN (`cnn_layer_ids`). You can find descriptions of each hyperparameter in comments."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "batch_size = 100 # This is the typical batch size we've been using\n",
    "image_size = 28 # This is the width/height of a single image\n",
    "\n",
    "# Number of color channels in an image. These are black and white images \n",
    "n_channels = 1 \n",
    "\n",
    "# Number of different digits we have images for (i.e. classes)\n",
    "n_classes = 10\n",
    "\n",
    "n_train = 55000 # Train dataset size\n",
    "n_valid = 5000 # Validation dataset size\n",
    "n_test = 10000 # Test dataset size\n",
    "\n",
    "# Layers in the CNN in the order from input to output\n",
    "cnn_layer_ids = ['conv1','pool1','conv2','pool2','fulcon1','softmax']\n",
    "\n",
    "# Hyperparameters of each layer (e.g. filter size of each convolution layer)\n",
    "layer_hyperparameters = {'conv1':{'weight_shape':[3,3,n_channels,16],'stride':[1,1,1,1],'padding':'SAME'},\n",
    "                         'pool1':{'kernel_shape':[1,3,3,1],'stride':[1,2,2,1],'padding':'SAME'},\n",
    "                         'conv2':{'weight_shape':[3,3,16,32],'stride':[1,1,1,1],'padding':'SAME'},\n",
    "                         'pool2':{'kernel_shape':[1,3,3,1],'stride':[1,2,2,1],'padding':'SAME'},\n",
    "                         'fulcon1':{'weight_shape':[7*7*32,128]},\n",
    "                         'softmax':{'weight_shape':[128,n_classes]}\n",
    "                        }"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Defining Inputs and Outputs\n",
    "Here we define input and output placeholders required to process a batch of data. We will use the same placeholders for all training, validation and testing data as all of them are processed in same size batches."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Inputs (Images) and Outputs (Labels) Placeholders\n",
    "tf_inputs = tf.placeholder(shape=[batch_size, image_size, image_size, n_channels],dtype=tf.float32,name='tf_mnist_images')\n",
    "tf_labels = tf.placeholder(shape=[batch_size, n_classes],dtype=tf.float32,name='tf_mnist_labels')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Defining Model Parameters and Other Variables\n",
    "Here we define various TensorFlow variables required for the following computations. These includes a global step variable (to decay learning rate) and weights and biases of each layer of the CNN."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Variables initialized\n"
     ]
    }
   ],
   "source": [
    "# Global step for decaying the learning rate\n",
    "global_step = tf.Variable(0,trainable=False)\n",
    "\n",
    "# Initializing the variables\n",
    "layer_weights = {}\n",
    "layer_biases = {}\n",
    "\n",
    "for layer_id in cnn_layer_ids:\n",
    "    if 'pool' not in layer_id:\n",
    "        layer_weights[layer_id] = tf.Variable(initial_value=tf.random_normal(shape=layer_hyperparameters[layer_id]['weight_shape'],\n",
    "                                                                          stddev=0.02,dtype=tf.float32),name=layer_id+'_weights')\n",
    "        layer_biases[layer_id] = tf.Variable(initial_value=tf.random_normal(shape=[layer_hyperparameters[layer_id]['weight_shape'][-1]],\n",
    "                                                                              stddev=0.01,dtype=tf.float32),name=layer_id+'_bias')\n",
    "    \n",
    "print('Variables initialized')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Defining Inference of the CNN\n",
    "Here we define the computations starting from input placeholder (`tf_inputs`) and then computing the hidden activations for each of the layers found in `cnn_layer_ids` (i.e. convolution/pooling and fulcon layers) and their respective parameters (`layer_hyperparamters`). At the final layer (`softmax`) we do not apply an activation function as for the rest of the layers, but obtain the unnormalized logit values without any activation function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated logits\n"
     ]
    }
   ],
   "source": [
    "# Calculating Logits\n",
    "\n",
    "h = tf_inputs\n",
    "for layer_id in cnn_layer_ids:\n",
    "    if 'conv' in layer_id:\n",
    "        # For each convolution layer, compute the output by using conv2d function\n",
    "        # This operation results in a [batch_size, output_height, output_width, out_channels]\n",
    "        # sized 4 dimensional tensor\n",
    "        h = tf.nn.conv2d(h,layer_weights[layer_id],layer_hyperparameters[layer_id]['stride'], \n",
    "                         layer_hyperparameters[layer_id]['padding']) + layer_biases[layer_id]\n",
    "        h = tf.nn.relu(h)\n",
    "\n",
    "    elif 'pool' in layer_id:\n",
    "        # For each pooling layer, compute the output by max pooling\n",
    "        # This operation results in a [batch_size, output_height, output_width, out_channels]\n",
    "        # sized 4 dimensional tensor\n",
    "        h = tf.nn.max_pool(h, layer_hyperparameters[layer_id]['kernel_shape'],layer_hyperparameters[layer_id]['stride'],\n",
    "                          layer_hyperparameters[layer_id]['padding'])\n",
    "\n",
    "    elif layer_id == 'fulcon1':\n",
    "        # At the first fulcon layer we need to reshape the 4 dimensional output to a\n",
    "        # 2 dimensional output to be processed by fully connected layers\n",
    "        # Note this should only done once, before \n",
    "        # computing the output of the first fulcon layer\n",
    "        h = tf.reshape(h,[batch_size,-1])\n",
    "        h = tf.matmul(h,layer_weights[layer_id]) + layer_biases[layer_id]\n",
    "        h = tf.nn.relu(h)\n",
    "\n",
    "    elif layer_id == 'softmax':\n",
    "        # Note that here we do not perform the same reshaping we did for fulcon1\n",
    "        # We only perform the matrix multiplication on previous output\n",
    "        h = tf.matmul(h,layer_weights[layer_id]) + layer_biases[layer_id]\n",
    "\n",
    "print('Calculated logits')\n",
    "tf_logits = h"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Defining Loss\n",
    "We use softmax cross entropy loss to optimize the parameters of the model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss defined\n"
     ]
    }
   ],
   "source": [
    "# Calculating the softmax cross entropy loss with the computed logits and true labels (one hot encoded)\n",
    "tf_loss = tf.nn.softmax_cross_entropy_with_logits_v2(logits=tf_logits,labels=tf_labels)\n",
    "print('Loss defined')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Model Parameter Optimizer\n",
    "We define an exponentially decaying learning rate and an optimizer to optimize the parameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss minimization defined\n"
     ]
    }
   ],
   "source": [
    "# Optimization\n",
    "\n",
    "# Here we define the function to decay the learning rate exponentially. \n",
    "# Everytime the global step increases the learning rate decreases\n",
    "tf_learning_rate = tf.train.exponential_decay(learning_rate=0.001,global_step=global_step,decay_rate=0.5,decay_steps=1,staircase=True)\n",
    "tf_loss_minimize = tf.train.RMSPropOptimizer(learning_rate=tf_learning_rate, momentum=0.9).minimize(tf_loss)\n",
    "print('Loss minimization defined')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Defining Predictions\n",
    "We get the predictiosn out by applying a softmax activation to the logits. Additionally we define a global step increment function and will be increase every time the validation accuracy plateus."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Prediction defined\n"
     ]
    }
   ],
   "source": [
    "tf_predictions = tf.nn.softmax(tf_logits)\n",
    "print('Prediction defined')\n",
    "\n",
    "tf_tic_toc = tf.assign(global_step, global_step + 1)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Define Accuracy \n",
    "A simple function to calculate accuracy for a given set of labels and predictions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def accuracy(predictions,labels):\n",
    "    '''\n",
    "    Accuracy of a given set of predictions of size (N x n_classes) and\n",
    "    labels of size (N x n_classes)\n",
    "    '''\n",
    "        \n",
    "    return np.sum(np.argmax(predictions,axis=1)==np.argmax(labels,axis=1))*100.0/labels.shape[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Lolading Data\n",
    "\n",
    "Here we download (if needed) the MNIST dataset and, perform reshaping and normalization. Also we conver the labels to one hot encoded vectors."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found and verified train-images-idx3-ubyte.gz\n",
      "Found and verified train-labels-idx1-ubyte.gz\n",
      "Found and verified t10k-images-idx3-ubyte.gz\n",
      "Found and verified t10k-labels-idx1-ubyte.gz\n",
      "\n",
      "Reading files train-images-idx3-ubyte.gz and train-labels-idx1-ubyte.gz\n",
      "60000 28 28\n",
      "(Images) Returned a tensor of shape  (60000, 28, 28, 1)\n",
      "(Labels) Returned a tensor of shape: 60000\n",
      "Sample labels:  [5 0 4 1 9 2 1 3 1 4]\n",
      "\n",
      "Reading files t10k-images-idx3-ubyte.gz and t10k-labels-idx1-ubyte.gz\n",
      "10000 28 28\n",
      "(Images) Returned a tensor of shape  (10000, 28, 28, 1)\n",
      "(Labels) Returned a tensor of shape: 10000\n",
      "Sample labels:  [7 2 1 0 4 1 4 9 5 9]\n",
      "\n",
      "Train size:  55000\n",
      "\n",
      "Valid size:  5000\n",
      "\n",
      "Test size:  10000\n"
     ]
    }
   ],
   "source": [
    "def maybe_download(url, filename, expected_bytes, force=False):\n",
    "  \"\"\"Download a file if not present, and make sure it's the right size.\"\"\"\n",
    "  if force or not os.path.exists(filename):\n",
    "    print('Attempting to download:', filename) \n",
    "    filename, _ = urlretrieve(url + filename, filename)\n",
    "    print('\\nDownload Complete!')\n",
    "  statinfo = os.stat(filename)\n",
    "  if statinfo.st_size == expected_bytes:\n",
    "    print('Found and verified', filename)\n",
    "  else:\n",
    "    raise Exception(\n",
    "      'Failed to verify ' + filename + '. Can you get to it with a browser?')\n",
    "  return filename\n",
    "\n",
    "\n",
    "def read_mnist(fname_img, fname_lbl, one_hot=False):\n",
    "    print('\\nReading files %s and %s'%(fname_img, fname_lbl))\n",
    "    \n",
    "    # Processing images\n",
    "    with gzip.open(fname_img) as fimg:        \n",
    "        magic, num, rows, cols = struct.unpack(\">IIII\", fimg.read(16))\n",
    "        print(num,rows,cols)\n",
    "        img = (np.frombuffer(fimg.read(num*rows*cols), dtype=np.uint8).reshape(num, rows, cols,1)).astype(np.float32)\n",
    "        print('(Images) Returned a tensor of shape ',img.shape)\n",
    "        \n",
    "        #img = (img - np.mean(img)) /np.std(img)\n",
    "        img *= 1.0 / 255.0\n",
    "    \n",
    "    # Processing labels\n",
    "    with gzip.open(fname_lbl) as flbl:\n",
    "        # flbl.read(8) reads upto 8 bytes\n",
    "        magic, num = struct.unpack(\">II\", flbl.read(8))               \n",
    "        lbl = np.frombuffer(flbl.read(num), dtype=np.int8)\n",
    "        if one_hot:\n",
    "            one_hot_lbl = np.zeros(shape=(num,10),dtype=np.float32)\n",
    "            one_hot_lbl[np.arange(num),lbl] = 1.0\n",
    "        print('(Labels) Returned a tensor of shape: %s'%lbl.shape)\n",
    "        print('Sample labels: ',lbl[:10])\n",
    "    \n",
    "    if not one_hot:\n",
    "        return img, lbl\n",
    "    else:\n",
    "        return img, one_hot_lbl\n",
    "    \n",
    "    \n",
    "# Download data if needed\n",
    "url = 'http://yann.lecun.com/exdb/mnist/'\n",
    "# training data\n",
    "maybe_download(url,'train-images-idx3-ubyte.gz',9912422)\n",
    "maybe_download(url,'train-labels-idx1-ubyte.gz',28881)\n",
    "# testing data\n",
    "maybe_download(url,'t10k-images-idx3-ubyte.gz',1648877)\n",
    "maybe_download(url,'t10k-labels-idx1-ubyte.gz',4542)\n",
    "\n",
    "# Read the training and testing data \n",
    "train_inputs, train_labels = read_mnist('train-images-idx3-ubyte.gz', 'train-labels-idx1-ubyte.gz',True)\n",
    "test_inputs, test_labels = read_mnist('t10k-images-idx3-ubyte.gz', 't10k-labels-idx1-ubyte.gz',True)\n",
    "\n",
    "valid_inputs, valid_labels = train_inputs[-n_valid:,:,:,:], train_labels[-n_valid:,:]\n",
    "train_inputs, train_labels = train_inputs[:-n_valid,:,:,:], train_labels[:-n_valid,:]\n",
    "\n",
    "print('\\nTrain size: ', train_inputs.shape[0])\n",
    "print('\\nValid size: ', valid_inputs.shape[0])\n",
    "print('\\nTest size: ', test_inputs.shape[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data Generators for MNIST\n",
    "\n",
    "Here we have the logic to iterate through each training, validation and testing datasets, in `batch_size` size strides."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train_index, valid_index, test_index = 0,0,0\n",
    "\n",
    "def get_train_batch(images, labels, batch_size):\n",
    "    global train_index\n",
    "    batch = images[train_index:train_index+batch_size,:,:,:], labels[train_index:train_index+batch_size,:]\n",
    "    train_index = (train_index + batch_size)%(images.shape[0] - batch_size)\n",
    "    return batch\n",
    "\n",
    "def get_valid_batch(images, labels, batch_size):\n",
    "    global valid_index\n",
    "    batch = images[valid_index:valid_index+batch_size,:,:,:], labels[valid_index:valid_index+batch_size,:]\n",
    "    valid_index = (valid_index + batch_size)%(images.shape[0] - batch_size)\n",
    "    return batch\n",
    "\n",
    "def get_test_batch(images, labels, batch_size):\n",
    "    global test_index\n",
    "    batch = images[test_index:test_index+batch_size,:,:,:], labels[test_index:test_index+batch_size,:]\n",
    "    test_index = (test_index + batch_size)%(images.shape[0] - batch_size)\n",
    "    return batch"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualizing MNIST Results\n",
    "Here we define a function to collect correctly and incorrectly classified samples to visualize later. Visualizing such samples will help us to understand why the CNN incorrectly classified certain samples."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Makes sure we only collect 10 samples for each \n",
    "correct_fill_index, incorrect_fill_index = 0,0\n",
    "\n",
    "# Visualization purposes\n",
    "correctly_predicted = np.empty(shape=(10,28,28,1),dtype=np.float32)\n",
    "correct_predictions = np.empty(shape=(10,n_classes),dtype=np.float32)\n",
    "incorrectly_predicted = np.empty(shape=(10,28,28,1),dtype=np.float32)\n",
    "incorrect_predictions = np.empty(shape=(10,n_classes),dtype=np.float32)\n",
    "\n",
    "def collect_samples(test_batch_predictions,test_images, test_labels):\n",
    "    global correctly_predicted, correct_predictions\n",
    "    global incorrectly_predicted, incorrect_predictions\n",
    "    global correct_fill_index, incorrect_fill_index\n",
    "    \n",
    "    correct_indices = np.where(np.argmax(test_batch_predictions,axis=1)==np.argmax(test_labels,axis=1))[0]\n",
    "    incorrect_indices = np.where(np.argmax(test_batch_predictions,axis=1)!=np.argmax(test_labels,axis=1))[0]\n",
    "    \n",
    "    if correct_indices.size>0 and correct_fill_index<10:\n",
    "        print('\\nCollecting Correctly Predicted Samples')\n",
    "        chosen_index = np.random.choice(correct_indices)\n",
    "        correctly_predicted[correct_fill_index,:,:,:]=test_images[chosen_index,:].reshape(1,image_size,image_size,n_channels)\n",
    "        correct_predictions[correct_fill_index,:]=test_batch_predictions[chosen_index,:]\n",
    "        correct_fill_index += 1\n",
    "\n",
    "    if incorrect_indices.size>0 and incorrect_fill_index<10:\n",
    "        print('Collecting InCorrectly Predicted Samples')\n",
    "        chosen_index = np.random.choice(incorrect_indices)\n",
    "        incorrectly_predicted[incorrect_fill_index,:,:,:]=test_images[chosen_index,:].reshape(1,image_size,image_size,n_channels)\n",
    "        incorrect_predictions[incorrect_fill_index,:]=test_batch_predictions[chosen_index,:]\n",
    "        incorrect_fill_index += 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Running MNIST Classification \n",
    "Here we train our CNN on MNIST data for `n_epochs` epochs. Each epoch we train the CNN with the full training dataset. Then we calculate the validation accuracy, according to which we decay the learning rate. Finally, each epoch we calculate the test accuracy which is computed using an independent test set. This code should run under 10 minutes if you run on a decent GPU and should reach to a test accuracy of about ~95%"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\users\\thushan\\documents\\python_virtualenvs\\tensorflow_venv\\lib\\site-packages\\tensorflow\\python\\client\\session.py:1711: UserWarning: An interactive session is already active. This can cause out-of-memory errors in some cases. You must explicitly call `InteractiveSession.close()` to release resources held by the other session(s).\n",
      "  warnings.warn('An interactive session is already active. This can '\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Average loss in epoch 0: 0.36967\n",
      "\tAverage Valid Accuracy in epoch 0: 98.00000\n",
      "\tAverage Test Accuracy in epoch 0: 97.84000\n",
      "\n",
      "Average loss in epoch 1: 0.08493\n",
      "\tAverage Valid Accuracy in epoch 1: 97.62000\n",
      "\tAverage Test Accuracy in epoch 1: 97.26000\n",
      "\n",
      "Average loss in epoch 2: 0.07174\n",
      "\tAverage Valid Accuracy in epoch 2: 98.40000\n",
      "\tAverage Test Accuracy in epoch 2: 97.97000\n",
      "\n",
      "Average loss in epoch 3: 0.06057\n",
      "\tAverage Valid Accuracy in epoch 3: 98.56000\n",
      "\tAverage Test Accuracy in epoch 3: 98.40000\n",
      "\n",
      "Average loss in epoch 4: 0.05895\n",
      "\tAverage Valid Accuracy in epoch 4: 98.30000\n",
      "\tAverage Test Accuracy in epoch 4: 98.17000\n",
      "\n",
      "Average loss in epoch 5: 0.05891\n",
      "\tAverage Valid Accuracy in epoch 5: 98.58000\n",
      "\tAverage Test Accuracy in epoch 5: 98.42000\n",
      "\n",
      "Average loss in epoch 6: 0.06474\n",
      "\tAverage Valid Accuracy in epoch 6: 98.52000\n",
      "\n",
      "Decreasing Learning rate\n",
      "\n",
      "\tAverage Test Accuracy in epoch 6: 98.27000\n",
      "\n",
      "Average loss in epoch 7: 0.03413\n",
      "\tAverage Valid Accuracy in epoch 7: 98.72000\n",
      "\tAverage Test Accuracy in epoch 7: 98.64000\n",
      "\n",
      "Average loss in epoch 8: 0.02893\n",
      "\tAverage Valid Accuracy in epoch 8: 98.64000\n",
      "\tAverage Test Accuracy in epoch 8: 98.56000\n",
      "\n",
      "Average loss in epoch 9: 0.02410\n",
      "\tAverage Valid Accuracy in epoch 9: 98.80000\n",
      "\tAverage Test Accuracy in epoch 9: 98.71000\n",
      "\n",
      "Average loss in epoch 10: 0.02168\n",
      "\tAverage Valid Accuracy in epoch 10: 99.00000\n",
      "\tAverage Test Accuracy in epoch 10: 98.72000\n",
      "\n",
      "Average loss in epoch 11: 0.02346\n",
      "\tAverage Valid Accuracy in epoch 11: 98.64000\n",
      "\tAverage Test Accuracy in epoch 11: 98.44000\n",
      "\n",
      "Average loss in epoch 12: 0.02165\n",
      "\tAverage Valid Accuracy in epoch 12: 98.84000\n",
      "\n",
      "Decreasing Learning rate\n",
      "\n",
      "\tAverage Test Accuracy in epoch 12: 98.65000\n",
      "\n",
      "Average loss in epoch 13: 0.01364\n",
      "\tAverage Valid Accuracy in epoch 13: 99.06000\n",
      "\tAverage Test Accuracy in epoch 13: 98.94000\n",
      "\n",
      "Average loss in epoch 14: 0.01007\n",
      "\tAverage Valid Accuracy in epoch 14: 99.08000\n",
      "\tAverage Test Accuracy in epoch 14: 98.89000\n",
      "\n",
      "Average loss in epoch 15: 0.00914\n",
      "\tAverage Valid Accuracy in epoch 15: 99.04000\n",
      "\tAverage Test Accuracy in epoch 15: 99.08000\n",
      "\n",
      "Average loss in epoch 16: 0.00784\n",
      "\tAverage Valid Accuracy in epoch 16: 99.04000\n",
      "\tAverage Test Accuracy in epoch 16: 99.04000\n",
      "\n",
      "Average loss in epoch 17: 0.00729\n",
      "\tAverage Valid Accuracy in epoch 17: 99.18000\n",
      "\tAverage Test Accuracy in epoch 17: 98.93000\n",
      "\n",
      "Average loss in epoch 18: 0.00605\n",
      "\tAverage Valid Accuracy in epoch 18: 99.06000\n",
      "\n",
      "Decreasing Learning rate\n",
      "\n",
      "\tAverage Test Accuracy in epoch 18: 98.91000\n",
      "\n",
      "Average loss in epoch 19: 0.00434\n",
      "\tAverage Valid Accuracy in epoch 19: 99.16000\n",
      "\tAverage Test Accuracy in epoch 19: 99.12000\n",
      "\n",
      "Average loss in epoch 20: 0.00362\n",
      "\tAverage Valid Accuracy in epoch 20: 99.16000\n",
      "\tAverage Test Accuracy in epoch 20: 99.02000\n",
      "\n",
      "Average loss in epoch 21: 0.00315\n",
      "\tAverage Valid Accuracy in epoch 21: 99.14000\n",
      "\n",
      "Decreasing Learning rate\n",
      "\n",
      "\tAverage Test Accuracy in epoch 21: 99.07000\n",
      "\n",
      "Average loss in epoch 22: 0.00275\n",
      "\tAverage Valid Accuracy in epoch 22: 98.98000\n",
      "\tAverage Test Accuracy in epoch 22: 99.03000\n",
      "\n",
      "Average loss in epoch 23: 0.00218\n",
      "\tAverage Valid Accuracy in epoch 23: 99.14000\n",
      "\tAverage Test Accuracy in epoch 23: 99.09000\n",
      "\n",
      "Average loss in epoch 24: 0.00211\n",
      "\tAverage Valid Accuracy in epoch 24: 99.16000\n",
      "\n",
      "Decreasing Learning rate\n",
      "\n",
      "\n",
      "Collecting Correctly Predicted Samples\n",
      "\n",
      "Collecting Correctly Predicted Samples\n",
      "\n",
      "Collecting Correctly Predicted Samples\n",
      "\n",
      "Collecting Correctly Predicted Samples\n",
      "Collecting InCorrectly Predicted Samples\n",
      "\n",
      "Collecting Correctly Predicted Samples\n",
      "\n",
      "Collecting Correctly Predicted Samples\n",
      "\n",
      "Collecting Correctly Predicted Samples\n",
      "\n",
      "Collecting Correctly Predicted Samples\n",
      "Collecting InCorrectly Predicted Samples\n",
      "\n",
      "Collecting Correctly Predicted Samples\n",
      "\n",
      "Collecting Correctly Predicted Samples\n",
      "Collecting InCorrectly Predicted Samples\n",
      "Collecting InCorrectly Predicted Samples\n",
      "Collecting InCorrectly Predicted Samples\n",
      "Collecting InCorrectly Predicted Samples\n",
      "Collecting InCorrectly Predicted Samples\n",
      "Collecting InCorrectly Predicted Samples\n",
      "Collecting InCorrectly Predicted Samples\n",
      "Collecting InCorrectly Predicted Samples\n",
      "\tAverage Test Accuracy in epoch 24: 99.11000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Parameters related to learning rate decay\n",
    "# counts how many times the validation accuracy has not increased consecutively for\n",
    "v_acc_not_increased_for = 0 \n",
    "# if the above count is above this value, decrease the learning rate\n",
    "v_acc_threshold = 3\n",
    "# currently recorded best validation accuracy\n",
    "max_v_acc = 0.0\n",
    "\n",
    "config = tf.ConfigProto(allow_soft_placement=True)\n",
    "# Good practice to use this to avoid any surprising errors thrown by TensorFlow\n",
    "config.gpu_options.allow_growth = True \n",
    "config.gpu_options.per_process_gpu_memory_fraction = 0.9 # Making sure Tensorflow doesn't overflow the GPU\n",
    "\n",
    "n_epochs = 25 # Number of epochs the training runs for\n",
    "\n",
    "session = tf.InteractiveSession(config=config)\n",
    "# Initialize all variables\n",
    "tf.global_variables_initializer().run()\n",
    "\n",
    "# Run training loop\n",
    "\n",
    "for epoch in range(n_epochs):\n",
    "    loss_per_epoch = []\n",
    "    \n",
    "    # Training phase. We train with all training data \n",
    "    # processing one batch at a time\n",
    "    for i in range(n_train//batch_size):\n",
    "        # Get the next batch of MNIST dataset\n",
    "        batch = get_train_batch(train_inputs, train_labels, batch_size)   \n",
    "        # Run TensorFlow opeartions\n",
    "        l,_ = session.run([tf_loss,tf_loss_minimize],feed_dict={tf_inputs: batch[0].reshape(batch_size,image_size,image_size,n_channels),\n",
    "                                  tf_labels: batch[1]})\n",
    "        # Add the loss value to a list\n",
    "        loss_per_epoch.append(l)\n",
    "    print('Average loss in epoch %d: %.5f'%(epoch,np.mean(loss_per_epoch)))    \n",
    "    \n",
    "    # Validation phase. We compute validation accuracy\n",
    "    # processing one batch at a time\n",
    "    valid_accuracy_per_epoch = []\n",
    "    for i in range(n_valid//batch_size):\n",
    "        # Get the next validation data batch\n",
    "        vbatch_images,vbatch_labels = get_valid_batch(valid_inputs, valid_labels, batch_size)\n",
    "        # Compute validation predictions\n",
    "        valid_batch_predictions = session.run(\n",
    "            tf_predictions,feed_dict={tf_inputs: vbatch_images}\n",
    "        )\n",
    "        # Compute and add the validation accuracy to a python list\n",
    "        valid_accuracy_per_epoch.append(accuracy(valid_batch_predictions,vbatch_labels))\n",
    "    \n",
    "    # Compute and print average validation accuracy\n",
    "    mean_v_acc = np.mean(valid_accuracy_per_epoch)\n",
    "    print('\\tAverage Valid Accuracy in epoch %d: %.5f'%(epoch,np.mean(valid_accuracy_per_epoch)))\n",
    "    \n",
    "    # Learning rate decay logic\n",
    "    if mean_v_acc > max_v_acc:\n",
    "        max_v_acc = mean_v_acc\n",
    "    else:\n",
    "        v_acc_not_increased_for += 1\n",
    "    \n",
    "    # Time to decrease learning rate\n",
    "    if v_acc_not_increased_for >= v_acc_threshold:\n",
    "        print('\\nDecreasing Learning rate\\n')\n",
    "        session.run(tf_tic_toc) # Increase global_step\n",
    "        v_acc_not_increased_for = 0\n",
    "        \n",
    "    # Testing phase. We compute test accuracy\n",
    "    # processing one batch at a time\n",
    "    accuracy_per_epoch = []\n",
    "    for i in range(n_test//batch_size):\n",
    "        btest_images, btest_labels = get_test_batch(test_inputs, test_labels, batch_size)\n",
    "        test_batch_predictions = session.run(tf_predictions,feed_dict={tf_inputs: btest_images})\n",
    "        accuracy_per_epoch.append(accuracy(test_batch_predictions,btest_labels))\n",
    "        \n",
    "        # Collect samples for visualization only in the last epoch\n",
    "        if epoch==n_epochs-1:\n",
    "            collect_samples(test_batch_predictions, btest_images, btest_labels)\n",
    "        \n",
    "    print('\\tAverage Test Accuracy in epoch %d: %.5f\\n'%(epoch,np.mean(accuracy_per_epoch)))\n",
    "session.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualizing Predictions\n",
    "Let us see how when our CNN did when it comes to predictions\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\ncdJJJwXznXfeOZi3atUqmFelefPmqZfBuqNjx46J01q2bBnM77rrrrrqTpXOPffcYD5nzpx67gka\nqo033jiY//KXv0zVzpo1a4L50qVLU/cp6Txq3759qna23377YD5hwoRg/uKLLwbzuXPnplpvQ8GV\nzQAAAAAAAACAzCg2AwAAAAAAAAAyo9gMAAAAAAAAAMiMYjMAAAAAAAAAIDOKzQAAAAAAAACAzFoU\nuwNIVlJSEsyHDBkSzM8///zEtrp165Zq3cuXLw/mo0aNCubXXHNNMK+oqEi1XqC2SktLg/njjz8e\nzLfZZpuCrfumm24K5vfdd1/B1gE0NsOHDw/m2223Xap2Pvroo0J0B+uoY445Jpg754J50u9Ll156\naaq8vLy8Br0DGoc+ffoE80ceeSSYt23bNphPmTIlmB911FG161hAy5Ytg7mZBfMWLer2z+FZs2Yl\nThs/fnydrhvF0blz52Ce9PMoreuvvz5xWl0fz2ltu+22wfxnP/tZMH/77bfrsjsooqRj89RTTw3m\naf9Wv/zyy1PlVenevXswHzhwYDC/5JJLgnnaGtxll10WzE877bRg3tBrbVzZDAAAAAAAAADIjGIz\nAAAAAAAAACAzis0AAAAAAAAAgMwoNgMAAAAAAAAAMqPYDAAAAAAAAADIzJLuxl3nKzYrzoqLqE2b\nNsF85MiRwfzYY48N5l26dAnm7733XuK6J0+eHMzfeeedYH700Uenyg899NBg/vjjjyf2qbFwzoVv\nX12P1sXzJUmPHj2C+RNPPBHMk+4mW5VmzcKfw02aNCmYDxo0KPU6mirOF+QsWLAgmG+88cap2jnh\nhBOC+cSJE1P3qaFpCOeL1LTPmb/97W/B/OCDDy5I+0m/e/3xj39MXGbChAkFWfe6qCGcM035fEny\nyCOPBPNDDjmknntSf959991gnvS306xZs4L5XXfdlbiOpJ+ThcL5Urc6duwYzJPe43/605/WZXca\nlaT6x6hRoxKXqaioqKPeeJwvdau0tDSYz5kzJ1U7H3/8cTDfe++9g/knn3ySqv3auOqqq4L5xRdf\nXJD2TznllGA+fvz4grRfGzU5X7iyGQAAAAAAAACQGcVmAAAAAAAAAEBmFJsBAAAAAAAAAJlRbAYA\nAAAAAAAAZEaxGQAAAAAAAACQmTlXnBteNuU7bW699dbBPOmO6L169Qrmf//734P5JZdcEszffPPN\n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\n1t63N5Eys25mdlt046Wy6MaD55lZs9j8R5vZ82a22MyWmtnfzWyHhNdVYmYHmdmdZvammf0ven3z\nzGyCme2SsNwVUZ/+Z2ZdA9PNzJ6I5nnNzFombdtaeDD29bf9i994ysyaRTeMeyXaDs7MdsrrY2cz\nu9LM3jKzZWa23MzeNrNRZtYpaeVR20Oi7VVmZovMbJqZ7VFVp2tyYywz62Nm46N9Xh5t39ejfvaM\n5ukfHV+5oQUuyz9+Yu1Ve+M0M9vZzO6PjqmV0TqfNLMjq1gmfkx2MrPrzeyjaPnPouOpWxXb7xQz\nm25mX5q/gdgiM3vHzO42X5itVmw7zI1l8e0wMm/+9aN98Ga0v5eZ2Swz+735IW9C60h1TFXhGvmC\n1RuSzs4vNMc5b4y+e5zX+Wuw2E2/zKyVmf02avubKN8gr91SM7vZzN4zf1PGb6JzfZiZta1qYxT6\nOE9Yh5nZ7Gjec6qZ95/RfFdUNV+e4fJj/y+TdFR+oTmfc256tEyNmNmPou3xkpnNN7NVZrbQ/Pvq\nUdUse5iZPWZmX0Tn11fRfnrQzI4NzL+xmV1r/v1vebRPPjGzf5vZH8yse97833svyx0/kkZG0cl5\n+6s0adlAf/Yys4lm9qn595QvzexpMzvOLPm/WcxsEzO7w/x7ULn5n9fX5x+7KeV+h3g8XmgOCf0O\nYf5n9tnmfw5/EJ0rS83sjei8DfYtd/yb/11BZvbTaBt8FZ27T1nsZ46ZdTD/s+t98z+XPjGzq81s\nvYT2v90vZrZDtL0/j7bbu+ZvbNyqphsp0P4hZjY1ajN37E4zs8QPXMzs/2LvCyvNv6fMiY75oWbW\nprb9AQCsA5xzPHjw4MGDR708JB0t/6+tTtJWtWzjYPkxOHPtLJa/6jD3/VOS2sbmP1b+xoNfRdPX\nRt/nHsfK3wgsafrnko6NtTc3mm+w/DiXTn4s4zWxPtwczXtV9P0a+bFgc9O/lrRNwmtzscfyvNe6\nWtLPA8u1lL8pkpP0WGD6OdG0FZK2Tbm9Z0TLjkuYvl6sfyNi+cgou1fSI7Ht8HX09U6xefeS9GWs\nnZVRX3PffyypZ2DdLWJt57bP17Gvj4hNK81bNte/770u+ULk1Xn7YknULxdfTtKe0TGS20/L8o+f\nWLulueUTtuUZ0fEXP07ix9V9kpoHlpsbTT8x9vVy+XG2c8t+JKljYNkJea9zcd7rfKmGx0luOyyK\n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\n2dTv039D/FS6/31Pb609sbV2Ttt5fPwh77G70pDnbOjr/5h9mNbala21N7fWHt9aOypd8f7X0n3L\n6U5Jfnct6wVgz6DYDMBWNCkcXDF13/lJJl8fvlfm6Md4Pra/+aEFtzn5OvRmndF0dSGxtbbcV2nv\ns9IKqmr6H8AnpjsLryV5fFUtd1G5zXRmuvGfk+EXPZqY7N87VNV1l1nmnmvo0/v7n8cuOFbqmOPn\nw1kas3y5Y/t6WboI16LH9mCtc0a6AtvkglR3X8dNTPo+93H2fnhm2XXTWvv3LI2petLQIu3MBUs3\n9TFMmZwBfEC6C2YuYjOO82mTgumj+zN175juteAVi66odRcRPaW/+XP9B3ermtmnK5m8Ni83pMyK\nr8uz+iLniVnaByu+TrXWvt5ae026s6OT5M7r9G2VlUyOrXtW1Y1WXHJnk2P+Hisss5bX5qGmx/ue\n/htixf3YP6d3nTdvA819XvpjdfJ8Dn1NmezDB865GOfCWmufa639YZI/6e/alfsQgG1OsRmADVNV\nR1TV96yyzH5JfqK/+ZHJ/f3ZgW/qbz6pX27WY9N9pbklef2C3Zu+wNBmmIyHfJOquvHszKr6/nRf\nNZ+rLxi9Kt14kG9orb2ytfaOJM/vF3lZVR24zn0epbX21SRv7G/+dj9u91z9Bbqmv7b79nT77JpJ\nnjRn+X2TPHUN3XpDuvFYb5Clr2MPMTl+rr/iUnO01r6UpTNun1Y7Xhhz4mnphm34WpYuIjZK/xwt\n16erknynv7mew3tMvqZ+v6q645w+3S7JQ/qb6zHW+DxPS/caccckL1zm+Z70p6rqienOLJ3YCo8h\nrbX/ylLB8nkrFSCr6tpVNb0fN/w4n/F36YZs+d4kL+jve1tr7fPLN1nR76W7GN8BSd7QjwG9rKq6\nV5LnDlz35LX5++es54Akv7XMNpbNV28ylvDV+2WVNpPlK0sXVt1VXp+uaHutJH+w0oJVNXvBu8l7\n74Or6sg5y//vrFyIXmlbxw64UN30++RHpn5fdj/2fivJddbSr3X0hKqal61HpiuWfzdLfwet5hXp\nXudunqWLBc81vQ+rap9VPojZ6bgFgFmKzQBspNsl+XhVvamqHlpVV18grqr2r6oHprvi+hH93X86\n0/456f4BvnmSt1XVbfq216yqxyX5s365l7XW/mfBvv13uuLa9arqpxZsux7OTXcmaaW7sNGtkqv/\n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\ntfah/vevJjk33U5dZB2ttfa1/uY+/TR4oOyqOiTJA5K8dJHtrpequl66F6SXJUlr7YrW2pdHrPLe\nSf6ntfapBdvtneTaVbV3ukB8doG235vkA621b7TWrkzyb0kevOD2t4M9Pi/J5mZGXraVUXlJxmVG\nXq7e/npmRl52nU3NS99+VGbkZSfysuvIS+SlNyYvyZ6RGXmJvEzxHrMyeclul5dkN/2bbKsXmw9O\n8pmp2xdmwX/G10tVHZ7kjuk+eVm07V5V9ZEklyT5p9baIuv4kyS/nuS7i253Skvy9qr6YFWduGDb\nI5JcmuTl/dcUXlpV+4/oy8OS/O0iDVprFyX5wySfTnJxkstba29fYBVnJfmhqrpRVe2X5P5JDl2k\nD9uEvHTGZkZe5GVD7cF5SdY3M/Ky62yZvCRrz8wWyEuydd5j5GXXkZeOvIzLS7JnZEZeOnt0XhLv\nMQPJS2d3ykuym/5NttWLzVtCVR2Q5I1Jntxa+8qi7VtrV7XW7pDkkCTHVNX3Ddzujye5pLX2wUW3\nOePurbU7Jblfkl+qqnss0HbvdF+zeFFr7Y5Jvp5k4bGBkqSq9k1yXJLXL9juBuk+sTsiyc2T7F9V\njxzavrV2bpLnJXl7kn9M8pEkVy3SB4bbrLz0216PzMiLvGyYPTwvyTplRl72HGMyswXykmyB9xh5\n2XPIy/bNSyIzG01eNi8vfVvvMduIvPiffzVbvdh8UXasrh/S37dhqmqfdCH6m9bam8asqz+1/h1J\n7juwyd2SHFdVF6T7isQPV9Wr1rDdi/qflyT5u3RfvxjqwiQXTn3a9IZ0wVqL+yX5UGvt8wu2u0+S\nT7bWLm2tfSfJm5L870VW0Fp7WWvtzq21eyS5LN3YQrubPT0vyTpkRl7kZaPIS5L1y4y87Fqbnpdk\n/TKzWXnpt70V3mPkZdeSF3lJ1iEvyR6RGXmRlwnvMauTl90rL8lu/DfZVi82n5HkyKo6oq/4PyzJ\nqRu18aqqdOOwnNta++M1ruOgqrp+//u1k/xIkv8a0ra19huttUNaa4ene+z/2lpb6BPxqtq/qq4z\n+T3Jj6Y7ZX6Q1trnknymqm7T33XvJOcs0ocpD88avlKT7qsBd62q/fp9cu90YwMNVlU37n/eIt1Y\nNK9eQz+2uj06L8n4zMhLR152PXm5ug/rlRl52bU2NS/J+Mxsdl767W6V9xh52bXkRV6SdchLskdk\n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\nzrnbnHPPSroijHJjuOqv2XDOzZN0X/j1/KybMEm+j8yCr3w/Kb/N2ks6NTJ+O/mvl5frXvn+U9eU\n7x+1VMn+07HoWBHOuVmqv6LybFv2xpiJs+WLF/NVpRuxFbvyzTm3RL6AJVW3e497w/MPzGzbSJt6\nSzo4/FqNvsabhHPuP5JeCr9eZmZZfammp2nsc1o57pEvrK0k6bfFRjSzwpuS3Rqe9zazQWUss+Jj\npkByheSh8t0bSPluDHi2/PreVv5q4cz3QuadIumwEuZb8Tm+gatUv1L9laftw/grNlAAX5Aev5GN\nCc87FHb1USi9b4XjI/n78HMzi7X1Z1q2//CSmFk7MyulwJlsjwXyN8JNJNtyy8i828rfWLDWzs3Y\nB5IbB7/nnHstMjxmTHg+yMyKfVC4zDZsYL+VmnY/BAA0MxSbAQDV0lvSO2Z2v5n9j5l9c4M4M1vF\nzPaT9A/5/v2k+psDJn4tXxBZV9IjZrZpmLa9mR0n6Q9hvBudc/9XZtveky+urWFmB5U5bTW8LX8l\nqUm6K1x9lBQNDpTvO7LYzeN+I38jo2mSTkjl50l6S76PxNGR6WrtHNXfrX68mQ1OFxXMbCMz+7n8\n+vnmCjbn3BeSLgu/Xvj/27v3cNnOuj7g3x85hEtAYiX0sblw0scgpqgQTpEWxDwGNSE1sd6aVKxY\nauoFHxBbn+MNAVsarFXrI15SLkEUAiLi0USClou1Ck3CNRdDj3CQRGxCuKmIEHz7x5qTM2fnnD3v\n7DV775m9P5/nWc+ey3rf9c7M+s6a/Zs1a1XVsw/viVxVezMcBuL0eQczOYzL8w6Prap+YfLz91TV\nfarqjMmy1haib5r8PX96vZ7Dj2fY0/OcJFdV1WmTZT5octzk/ZP5Lm+tffI4fczrBVX12qr6hqq6\n58RPVfUPq+rnM+Sw5chxSxfh1UneM7n8+qp68uGCSFWdl6GQft8Mz+evL3C5W+HZGYp+X5nkDVV1\nz/paVadU1SVVtfYxbeZ7WrfW2l05UoT6zqp6TVU9amr896+qJ1bVizKcuHXa702mSvKbVfX9VXXy\npN2JVfWlVfXfquob1rQ7nJlLq2rDe4G21m7I8MXkyRm2MZ/J8MXbRvu7JsPJ9JKheP3Hk4zc82XX\n5PX89iQ3ZHiNZhXVknHv8b9aVS+rqq+rqgdPjWNvkpdn+JLgbzNsP5Phebixqp5VVY+Yyth9J9u3\nZ0/mu7Zj3KO01t6QI1+qvLSqnrdm2//5VXVxVf12kp9Z0/y/ZDjkx5dkqLz5cAAAIABJREFUeL84\nc9LmAZPtwk/mSOF3HidmOF7wn1TV9x7jOdpXVb+R5F9N5n/xmnMTHH5P/PHJ2E+YtH1kkt/JcLiU\n6b2it9qnMpzk8CWHv9ioqpOr6oU5ci6M587R30sy7IV8nyS/W1XPXLPNeFhVXVpVb8nRX/5+T1Vd\nW1X/es1rfvJku3bu5KZNXw8BWEKtNZPJZDKZRk9Jvi5D8Wp6+lSGn8pO33Z3kh85Th9fn+Gf6sPz\nfixDceHw9T9IctIx2p07uf/QOuN7+VQ/H09yaDJ989Q8hyb3n3ucPp42uf8t6yznmH1kOOHQ56bG\n8MkMZ7hvST6Y5KnHegxJvjZDobIlOf8Yy3v01HP0tDlfs7dM2l05Z7vn9rZL8k+T3D71uD+b5CMZ\nigzT68VXrWm3J8nr17T72NTlb5y6b2/v+DIUg352zbI/PvVa3KtdhuNz3jW573MZiv6Hpl+rDCfe\na5nstHeM5f77qdf/7zMU4e+eWuavJTmhd31aM8+9nocMP6WffoyfmKxz07cdM4frLGfdxziZ54um\nxtwyFGX+Zur6B5M8Ysw6tdF1eqPP5dR9l6xZbz+V5K+mrh86RpuNvqcdfhzrZrrnMU3N+2M58l5y\n+LX5aI5+X/rAMdqdPDWewxlY2+5pa9p89dR9f5fhGPOHklw1Nc/TMuP9dDLf90319dox68eaPH5i\nTR4+vmZdbUnem+Sf9GQgG3+Pn36f+/vJOjI9jruTfPvU/I9eM8ZP58ixdw/fdl2Sz+tdp2atbzPa\nnpThC8C1z+Xa5/dlx8nU9PvgxzK8v7cMv5Q4vN1+7hyv7QPX9NkyZO6uHL3+twyF8vuvaf8Pkhxc\n0/bwY7l7st4eyrG388/NjPexqX7v9R6zXh+Z+pyT4aSv09uS6df+F+Z9r0jysCR/tGY9/GiOfn9r\nSX5iqs2z1tz31zmyjT48/coi8moymUym1Zvs2QzAQrTWrk3yxUn+Q4Z/ng9O7npQhn8835GhAPbl\nrbUXHKeP38nw09X/keEfowdmKOj8UYaznX9dG/Z63YjvzrAn1Z9m+FnnwyfTg9ZrtCittd/KUID5\n/Qz/wN03QwHipzP8pPu2tW0mP1l9WYYC6S+2YS+ytf2+K0eO5fzfJ3vDLY02HFv1kRl+vv7HGR77\n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\nJLk2yQlJXtpau6mqnp/k+tbagSQvSfKKqjqY5KMZwga7jrxAP3mBfvIC85EZ6Ccv0E9eYLauYza3\n1q5Jcs2a254zdfnTSb5lsUM7ytw/K1hw+2UYw3a3X4YxLMNjmElelmIMHsNyPAcz7YC8LKKPVW+/\nDGPYCY9hpiXIS7L9z9N2t1+GMWx3+2UZw0xLkJntfp62u/0yjMFj6CQv1pUFtF+GMcjL1rRfhjFs\nd/tlGMN2tz+usic/AAAAAABj9RyzGQAAAAAA1rX0xeaqOr+qbq2qg1W1f862L62qO6rqxg0u+/Sq\nenNV3VxVN1XVMzfQx/2r6v9U1bsnfTxvA32cUFXvrKrfnbftpP2hqnpvVb2rqq7fQPuTq+q1VfWn\nVXVLVf2zOdt/8WTZh6dPVtWz5uzjBybP341V9aqquv+c7Z85aXvTvMteJfJyTz8bzoy8yMsc7Tec\nGXk5qo8NZ0Zets525mXSflRmliEvk/bbto2Rl60jL/f0Iy8j8jLpY8dnRl7u6WdX52XSj23MDPJy\nTz8rm5dJ+23fxmx6XlprSztlONj6nyX5x0lOTPLuJGfP0f5JSc5JcuMGl/+FSc6ZXH5wkvfNs/xJ\nu0ryoMnl+yZ5e5LHz9nHs5O8MsnvbvBxHEry0BGvw8uT/LvJ5ROTnDzyNf3LJA+fo82pST6Q5AGT\n669J8rQ52j8qyY1JHpjhOOV/kOSLFrGOLtMkL0f1s+HMyIu8zNHHhjMjL0f1sZDMyMvmTdudl0n7\nUZlZhrxM2i/FNkZeNm+Sl6P6kZcN5mXSZsdnRl6O6mfX5mXSzjam77mVl7Zz8jL1uu64z2TLvmfz\n45IcbK29v7X2mSRXJbm4t3Fr7Q8znPlzQ1prH26tvWNy+a+S3JLhRZ2nj9Za++vJ1ftOpu4DZVfV\naUkuTPLieZa7KFX1kAxvSC9JktbaZ1prHx/R5XlJ/qy19sE52+1J8oCq2pMhEH8xR9svSfL21tqn\nWmt3J3lrkm+cc/mrYNfnJdnezMjLShmVl2RcZuTlnuUvMjPysnm2NS+T9qMyIy/3Ii+bR14iLxNj\n8pLsjszIS+Rlim3M+uQlOy4vyQ79TLbsxeZTk3xo6vptmfOf8UWpqr1JHpPhm5d5255QVe9KckeS\n32+tzdPHzyX5oSR/P+9yp7Qkb6yqG6rqsjnbnpnkziQvm/xM4cVVddKIsVyS5FXzNGit3Z7kp5P8\neZIPJ/lEa+2Nc3RxY5KvrKovqKoHJnlKktPnGcOKkJfB2MzIi7xsqV2cl2SxmZGXzbM0eUk2npkl\nyEuyPNsYedk88jKQl3F5SXZHZuRlsKvzktjGdJKXwU7KS7JDP5Mte7F5KVTVg5L8ZpJntdY+OW/7\n1trnWmuPTnJaksdV1aM6l/svktzRWrth3mWu8cTW2jlJLkjyfVX1pDna7snwM4tfaq09JsnfJJn7\n2EBJUlUnJrkoyW/M2e7zM3xjd2aSf5TkpKp6am/71totSV6Y5I1J3pDkXUk+N88Y6LddeZksexGZ\nkRd52TK7PC/JgjIjL7vHmMwsQV6SJdjGyMvuIS+rm5dEZraavGxfXiZtbWNWiLz4n3+WZS82356j\nq+unTW7bMlV13wwh+vXW2uvG9DXZtf7NSc7vbPKEJBdV1aEMP5H46qr6tQ0s9/bJ3zuS/FaGn1/0\nui3JbVPfNr02Q7A24oIk72it/b852z05yQdaa3e21j6b5HVJ/vk8HbTWXtJae2xr7UlJPpbh2EI7\nzW7PS7KAzMiLvGwVeUmyuMzIy+ba9rwki8vMduVlsuxl2MbIy+aSF3lJFpCXZFdkRl7k5TDbmNnk\nZWflJdnBn8mWvdh8XZKzqurMScX/kiQHtmrhVVUZjsNyS2vtZzbYxylVdfLk8gOSfE2SP+1p21r7\n4dbaaa21vRke+5taa3N9I15VJ1XVgw9fTvK1GXaZ79Ja+8skH6qqL57cdF6Sm+cZw5RLs4Gf1GT4\nacDjq+qBk9fkvAzHBupWVQ+b/D0jw7FoXrmBcSy7XZ2XZHxm5GUgL5tPXu4Zw6IyIy+ba1vzkozP\nzHbnZbLcZdnGyMvmkhd5SRaQl2RXZEZe5OUw25jZ5GVn5SXZyZ/J2gLPNrgZU4Zjh7wvw1k3f3TO\ntq/KcPySz2b49uHpc7Z/YoZjubwnw27l70rylDn7+LIk75z0cWOS52zweTg3GzjTZoYzlb57Mt00\n73M46ePRSa6fPIbXJ/n8DfRxUpK7kjxkg4//eRnehG5M8ook95uz/f/K8Abw7iTnbdb6ut2TvBzV\n19yZkZd72stLX/sNZ0ZejupnVGbkZWum7czLpP2ozGx3Xibttn0bIy9bM8nLUX3JywbzMuljx2dG\nXo7qa9fmZdKHbczsxygvR/pa2bxM+tjRn8lqshAAAAAAANiwZT+MBgAAAAAAK0CxGQAAAACA0RSb\nAQAAAAAYTbEZAAAAAIDRFJsBAAAAABhNsRkAAAAAgNEUmwEAAAB+2TsOAAAAEUlEQVQAGE2xGQAA\nAACA0f4/GaDpyOhBDSYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x19861442f60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Defining the plot related settings\n",
    "pylab.figure(figsize=(25,20))  # in inches\n",
    "width=0.5 # Width of a bar in the barchart\n",
    "padding = 0.05 # Padding between two bars\n",
    "labels = list(range(0,10)) # Class labels\n",
    "\n",
    "# Defining X axis\n",
    "x_axis = np.arange(0,10)\n",
    "\n",
    "# We create 4 rows and 7 column set of subplots\n",
    "\n",
    "# We choose these to put the titles in\n",
    "# First row middle\n",
    "pylab.subplot(4, 7, 4)\n",
    "pylab.title('Correctly Classified Samples',fontsize=24)\n",
    "\n",
    "# Second row middle\n",
    "pylab.subplot(4, 7,11)\n",
    "pylab.title('Softmax Predictions for Correctly Classified Samples',fontsize=24)\n",
    "\n",
    "# For 7 steps\n",
    "for sub_i in range(7):\n",
    "    # Draw the top row (digit images)\n",
    "    pylab.subplot(4, 7, sub_i + 1)        \n",
    "    pylab.imshow(np.squeeze(correctly_predicted[sub_i]),cmap='gray')    \n",
    "    pylab.axis('off')\n",
    "    \n",
    "    # Draw the second row (prediction bar chart)\n",
    "    pylab.subplot(4, 7, 7 + sub_i + 1)        \n",
    "    pylab.bar(x_axis + padding, correct_predictions[sub_i], width)\n",
    "    pylab.ylim([0.0,1.0])    \n",
    "    pylab.xticks(x_axis, labels)\n",
    "\n",
    "# Set titles for the third and fourth rows\n",
    "pylab.subplot(4, 7, 18)\n",
    "pylab.title('Incorrectly Classified Samples',fontsize=26)\n",
    "pylab.subplot(4, 7,25)\n",
    "pylab.title('Softmax Predictions for Incorrectly Classified Samples',fontsize=24)\n",
    "\n",
    "# For 7 steps\n",
    "for sub_i in range(7):\n",
    "    # Draw the third row (incorrectly classified digit images)\n",
    "    pylab.subplot(4, 7, 14 + sub_i + 1)\n",
    "    pylab.imshow(np.squeeze(incorrectly_predicted[sub_i]),cmap='gray')\n",
    "    pylab.axis('off')\n",
    "    \n",
    "    # Draw the fourth row (incorrect predictions bar chart)\n",
    "    pylab.subplot(4, 7, 21 + sub_i + 1)        \n",
    "    pylab.bar(x_axis + padding, incorrect_predictions[sub_i], width)\n",
    "    pylab.ylim([0.0,1.0])\n",
    "    pylab.xticks(x_axis, labels)\n",
    "\n",
    "# Save the figure\n",
    "pylab.savefig('mnist_results.png')\n",
    "pylab.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
